<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>$(NetCoreAppCurrent);$(NetCoreAppPrevious);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum)</TargetFrameworks>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    <UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile>
    <IsPackable>true</IsPackable>
    <PackageDescription>This package provides collections that are thread safe and guaranteed to never change their contents, also known as immutable collections. Like strings, any methods that perform modifications will not change the existing instance but instead return a new instance. For efficiency reasons, the implementation uses a sharing mechanism to ensure that newly created instances share as much data as possible with the previous instance while ensuring that operations have a predictable time complexity.

The System.Collections.Immutable library is built-in as part of the shared framework in .NET Runtime. The package can be installed when you need to use it in other target frameworks.</PackageDescription>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Properties\InternalsVisibleTo.cs" />

    <Compile Include="System\Polyfills.cs" />
    <Compile Include="System\Collections\ThrowHelper.cs" />
    <Compile Include="$(CoreLibSharedDir)System\Collections\HashHelpers.cs" Link="System\Collections\HashHelpers.cs" />

    <Compile Include="System\Collections\Frozen\Constants.cs" />
    <Compile Include="System\Collections\Frozen\DefaultFrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\DefaultFrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\EmptyFrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\EmptyFrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\FrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\FrozenHashTable.cs" />
    <Compile Include="System\Collections\Frozen\FrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\FrozenSetInternalBase.cs" />
    <Compile Include="System\Collections\Frozen\ItemsFrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\KeysAndValuesFrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\SmallFrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\SmallFrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\SmallValueTypeComparableFrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\SmallValueTypeComparableFrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\SmallValueTypeDefaultComparerFrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\SmallValueTypeDefaultComparerFrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\ValueTypeDefaultComparerFrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\ValueTypeDefaultComparerFrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\Int32\Int32FrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\Int32\Int32FrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\String\Hashing.cs" />
    <Compile Include="System\Collections\Frozen\String\KeyAnalyzer.cs" />
    <Compile Include="System\Collections\Frozen\String\LengthBuckets.cs" />
    <Compile Include="System\Collections\Frozen\String\LengthBucketsFrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\String\LengthBucketsFrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_FullCaseInsensitiveAscii.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_FullCaseInsensitive.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_Full.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_LeftJustifiedCaseInsensitiveAsciiSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_LeftJustifiedCaseInsensitiveSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_LeftJustifiedSingleChar.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_RightJustifiedCaseInsensitiveSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_RightJustifiedCaseInsensitiveAsciiSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_RightJustifiedSingleChar.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_RightJustifiedSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenDictionary_LeftJustifiedSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_FullCaseInsensitiveAscii.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_FullCaseInsensitive.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_Full.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_LeftJustifiedCaseInsensitiveSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_LeftJustifiedCaseInsensitiveAsciiSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_LeftJustifiedSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_LeftJustifiedSingleChar.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_RightJustifiedCaseInsensitiveAsciiSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_RightJustifiedCaseInsensitiveSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_RightJustifiedSubstring.cs" />
    <Compile Include="System\Collections\Frozen\String\OrdinalStringFrozenSet_RightJustifiedSingleChar.cs" />

    <Compile Include="System\Collections\Generic\IHashKeyCollection.cs" />
    <Compile Include="System\Collections\Generic\ISortKeyCollection.cs" />

    <Compile Include="System\Collections\Immutable\AllocFreeConcurrentStack.cs" />
    <Compile Include="System\Collections\Immutable\DictionaryEnumerator.cs" />
    <Compile Include="System\Collections\Immutable\DisposableEnumeratorAdapter_2.cs" />
    <Compile Include="System\Collections\Immutable\IBinaryTree.cs" />
    <Compile Include="System\Collections\Immutable\IImmutableArray.cs" />
    <Compile Include="System\Collections\Immutable\IImmutableDictionary.cs" />
    <Compile Include="System\Collections\Immutable\IImmutableDictionaryInternal.cs" />
    <Compile Include="System\Collections\Immutable\IImmutableList.cs" />
    <Compile Include="System\Collections\Immutable\IImmutableListQueries.cs" />
    <Compile Include="System\Collections\Immutable\IImmutableQueue.cs" />
    <Compile Include="System\Collections\Immutable\IImmutableSet.cs" />
    <Compile Include="System\Collections\Immutable\IImmutableStack.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableHashSet_1.HashBucketByValueEqualityComparer.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableHashSet_1.HashBucketByRefEqualityComparer.cs" />
    <Compile Include="System\Collections\Immutable\IStrongEnumerable_2.cs" />
    <Compile Include="System\Collections\Immutable\IStrongEnumerator_1.cs" />
    <Compile Include="System\Collections\Immutable\IOrderedCollection.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableArray.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableArray_1.Builder.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableArray_1.Builder.DebuggerProxy.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableArray_1.Enumerator.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableArray_1.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableArray_1.netcoreapp.cs" Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'" />
    <Compile Include="System\Collections\Immutable\ImmutableArray_1.Minimal.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableDictionary.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableDictionary_2.Builder.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableDictionary_2.Comparers.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableDictionary_2.Enumerator.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableDictionary_2.HashBucket.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableDictionary_2.MutationInput.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableDictionary_2.MutationResult.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableDictionary_2.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableEnumerableDebuggerProxy.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableExtensions.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableExtensions.Minimal.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableHashSet.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableHashSet_1.Builder.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableHashSet_1.Enumerator.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableHashSet_1.HashBucket.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableHashSet_1.MutationInput.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableHashSet_1.MutationResult.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableHashSet_1.NodeEnumerable.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableHashSet_1.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableInterlocked.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableList.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableList_1.Builder.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableList_1.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableList_1.Enumerator.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableList_1.Node.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableQueue.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableQueue_1.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableQueue_1.Enumerator.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedDictionary.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedDictionary_2.Builder.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedDictionary_2.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedDictionary_2.Enumerator.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedDictionary_2.Node.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedSet.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedSet_1.Builder.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedSet_1.Builder.DebuggerProxy.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedSet_1.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedSet_1.Enumerator.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableSortedSet_1.Node.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableStack.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableStack_1.cs" />
    <Compile Include="System\Collections\Immutable\ImmutableStack_1.Enumerator.cs" />
    <Compile Include="System\Collections\Immutable\KeysOrValuesCollectionAccessor.cs" />
    <Compile Include="System\Collections\Immutable\RefAsValueType.cs" />
    <Compile Include="System\Collections\Immutable\SecureObjectPool.cs" />
    <Compile Include="System\Collections\Immutable\SortedInt32KeyNode.cs" />
    <Compile Include="System\Collections\Immutable\SortedInt32KeyNode.Enumerator.cs" />
    <Compile Include="System\Linq\ImmutableArrayExtensions.cs" />
    <Compile Include="System\Runtime.InteropServices\ImmutableCollectionsMarshal.cs" />
    <Compile Include="Validation\Requires.cs" />
    <Compile Include="$(CommonPath)System\Runtime\Versioning\NonVersionableAttribute.cs" Link="Common\System\Runtime\Versioning\NonVersionableAttribute.cs" />
    <None Include="Interfaces.cd" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
    <Compile Include="$(CoreLibSharedDir)System\Runtime\CompilerServices\CollectionBuilderAttribute.cs" Link="System\Runtime\CompilerServices\CollectionBuilderAttribute.cs" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == '$(NetCoreAppCurrent)'">
    <Reference Include="System.Collections" />
    <Reference Include="System.Linq" />
    <Reference Include="System.Memory" />
    <Reference Include="System.Runtime" />
    <Reference Include="System.Runtime.InteropServices" />
    <Reference Include="System.Threading" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
    <PackageReference Include="System.Memory" Version="$(SystemMemoryVersion)" />
    <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="$(SystemRuntimeCompilerServicesUnsafeVersion)" />
  </ItemGroup>

</Project>
